package Work20241106;

/**
 * @author zdl
 * @date 2024/11/6
 */
public class Demo4 {
    public static void main(String[] args) {
        int c = 0;
        /**
         * while循环执行流程
         *  c=0 0<5 true sout()  c++
         *  c=1 1<5 true sout()  c++
         *  ...
         *  c=4 4<5 true sout()   c++
         *  c=5 5<5 false  循环结束
         */
        while (c < 5) {
            System.out.println("hello world");
            c++;
        }
        System.out.println("===========================================");
        //do while循环 输出1-3
        /**
         * do while 执行流程
         * num =1 sout(1) num++ 2<4 true
         * num=2 sout(2)  num++  3<4   true
         * num=3 sout(3) num++ 4<4 false 循环结束
         */
        int num = 1;
        do {
            System.out.println(num);
            num++;
        } while (num < 4);

        System.out.println("===========================================");
        //for循环   输出0-3
        /**
         * for执行流程
         * j=0 0<4 true sout(0) j++
         * j=1 1<4 true sout(1) j++
         * j=2 2<4 true sout(2) j++
         * j=3 3<4 true sout(3) j++
         * j=4 4<4 false 循环结束
         */
        for (int j = 0; j < 4; j++) {
            System.out.println(j);
        }

        System.out.println("===========================================");
        //for  嵌套循环
        /**
         * 执行流程
         *  i=0 i<3 true
         *      进行内层循环
         *      j=0 j<3 true sout(*) j++
         *      j=1 j<3 true sout(*) j++
         *      j=2 j<3 true sout(*) j++
         *      j=3 j<3 false 结束内层循环  往下执行换行  i++
         *  i=1 i<3 true
         *      进行内层循环
         *      j=0 j<3 true sout(*) j++
         *      j=1 j<3 true sout(*) j++
         *      j=2 j<3 true sout(*) j++
         *      j=3 j<3 false 结束内层循环  往下执行换行  i++
         *  i=2 i<3 true
         *      进行内层循环
         *      j=0 j<3 true sout(*) j++
         *      j=1 j<3 true sout(*) j++
         *      j=2 j<3 true sout(*) j++
         *      j=3 j<3 false 结束内层循环  往下执行换行  i++
         *  i= 3 i<3 false 结束循环
         */
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("===========================================");
        /**
         * *            1
         * **           2
         * ***          3
         * ****         4
         * *****        5
         *  分析：总共5行，外层循环代表循环行数，循环5次
         *       每一行展示的* 依次+1  i+1
         */
        /**
         * 执行流程
         *  i = 0 0<5 true
         *      内层循环
         *      j=0,j(0)<i(0)+1 true sout(*) j++
         *      j=1,j(1)<i(0)+1 false 结束内层循环  往下执行换行  i++
         *  i=1 1<5 true
         *      内层循环
         *      j=0,j(0)<i(1)+1 true sout(*) j++
         *      j=1,j(1)<i(1)+1 true sout(*)  j++
         *      j=2,j(2)<i(1)+1 false 结束内层循环  往下执行换行  i++
         *  i=2 2<5 true
         *      内层循环
         *      j=0,j(0)<i(2)+1 true sout(*) j++
         *      j=1,j(1)<i(2)+1 true sout(*)  j++
         *      j=2,j(2)<i(2)+1 true sout(*)  j++
         *      j=3,j(3)<i(2)+1 false 结束内层循环  往下执行换行  i++
         *  .....
         *  i=4 4<5 true
         *      内层循环
         *      j=0,j(0)<i(4)+1 true sout(*) j++
         *      j=1,j(1)<i(4)+1 true sout(*)  j++
         *      j=2,j(2)<i(4)+1 true sout(*)  j++
         *      j=3,j(3)<i(4)+1 true  sout(*)  j++
         *      j=4,j(4)<i(4)+1 true  sout(*)  j++
         *      j=5,j(5)<i(4)+1 结束内层循环  往下执行换行  i++
         *  i=5 5<5 false 结束循环
         *
         */
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < i + 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }

        System.out.println("===========================================");
        /**
         * ****     4
         * ***      3
         * **       2
         * *        1
         * 外层循环行数4次，内层从第一行4个* 开始，依次往下-1   行数列数关系   j= 4-i
         */
        /**
         * 执行流程
         *      i=0,0<4 true
         *          进入内层循环
         *          j=0,j(0)<4-i(0) true sout(*) j++
         *          j=1 j(1)<4-i(0) true sout(*) j++
         *          j=2 j(2)<4-i(0) true sout(*) j++
         *          j=3 j(3)<4-i(0) true sout(*) j++
         *          j=4 j(4)<4-i(0) false  结束内层循环，往下执行换行  i++
         *       ......
         *       i=3,3<4 true
         *          进入内层循环
         *          j=0 j(0)<4-i(3) true sout(*) j++
         *          j=1 j(1)<4-i(3) false 结束内层循环，往下执行换行  i++
         *      i=4 4<4 false  结束循环
         *
         */
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4 - i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }


        System.out.println("===========================================");
        /**
         * *****  0空  5*
         *   ***  2空  3*
         *     *  4空  1*
         *  分析：总共3行，先打印空 后打印* 空与行的关系   空=2*行    *与行的关系   * = 5-2*行
         */
        /**
         * 执行流程
         *      i=0,0<3 true
         *          第一个内层循环
         *              j=0 0<0 false 结束一个内层循环 往下执行 执行第二个循环
         *          第二个内层循环
         *              j=0 0<5-2*0 true sout(*) j++
         *              j=1 1<5-2*0 true sout(*) j++
         *              j=2 2<5-2*0 true sout(*) j++
         *              j=3 3<5-2*0 true sout(*) j++
         *              j=4 4<5-2*0 true sout(*) j++
         *              j=5 5<5-2*0 false 结束第二个内层循环  往下执行 换行 i++
         *      i=1 1<3 true
         *          第一个内层循环
         *              j=0,0<2*1 true sout(空) j++
         *              j=1,1<2*1 true sout(空) j++
         *              j=2 2<2*1 false 结束一个内层循环 往下执行 执行第二个循环
         *          第二个循环（第二个循环接着第一个循环，没有换行）
         *              j=0 0<5-2*1 true sout(*) j++
         *              j=1 1<5-2*1 true sout(*) j++
         *              j=2 2<5-2*1 true sout(*) j++
         *              j=2 2<5-2*1 false 结束第二个内层循环  往下执行 换行 i++
         *       i=2 2<3 true
         *          第一个内层循环
         *              j=0,0<2*2 true sout(空) j++
         *              j=1,1<2*2 true sout(空) j++
         *              j=2,2<2*2 true sout(空) j++
         *              j=3,3<2*2 true sout(空) j++
         *              j=4,4<2*2 false 结束一个内层循环 往下执行 执行第二个循环
         *          第二个内层循环（第二个循环接着第一个循环，没有换行）
         *              j=0 0<5-2*2 true sout(*) j++
         *              j=1 1<5-2*2 true 结束第二个内层循环  往下执行 换行 i++
         *       i=3 3<3 false  结束循环
         *
         */

        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 2 * i; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j < 5 - 2 * i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("===========================================");
        /**
         *    *     3空 1*
         *   **     2空 2*
         *  ***     1空 3*
         * ****     0空 4*
         *  分析：4行外层循环行数4次， 空与循环行数关系  空=3-i   *与循环行数关系   * = i+1
         */
        /**
         * 执行流程
         *      i =0 0<4 true
         *          第一个内循环
         *          j=0 j(0)<3-i(0) true sout(空) j++
         *          j=1 j(1)<3-i(0) true sout(空) j++
         *          j=2 j(2)<3-i(0) true sout(空) j++
         *          j=3 j(3)<3-i(0) false 第一个内循环结束  接着往下执行
         *          第二个内循环
         *          j=0 j(0)<i(0)+1 true sout(*) j++
         *          j=1 j(1)<i(0)+1 false 第二个内循环结束  接着往下执行 换行  i++
         *      i=1 1<4 true
         *          第一个内循环
         *          j=0 j(0)<3-i(1) true sout(空) j++
         *          j=1 j(1)<3-i(1) true sout(空) j++
         *          j=2 j(2)<3-i(1) false 第一个内循环结束  接着往下执行
         *          第二个内循环
         *          j=0 j(0)<i(1)+1 sout(*) j++
         *          j=1 j(1)<i(1)+1 sout(*) j++
         *          j=2 j(2)<i(1)+1 false 第二个内循环结束  接着往下执行 换行  i++
         *      ........
         *      i=3 i<4 true
         *          第一个内循环
         *          j=0 j(0)<3-i(3) false 第一个内循环结束  接着往下执行
         *          第二个内循环
         *          j=0 j(0)<i(3)+1 sout(*) j++
         *          j=1 j(1)<i(3)+1 sout(*) j++
         *          j=2 j(2)<i(3)+1 sout(*) j++
         *          j=3 j(3)<i(3)+1 sout(*) j++
         *          j=4 j(4)<i(3)+1 false 第二个内循环结束  接着往下执行 换行  i++
         *      i=4 4<4 false 结束循环
         */
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 3 - i; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j < i + 1; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
        System.out.println("===========================================");
        /**
         *       A      3空 A 3空
         *      ABA     2空 ABA 2空
         *     ABCBA    1空 ABCBA 1空
         *    ABCDCBA   ABCDBCA
         */
        /**
         *      i =0,0<4 true
         *          第一层内循环
         *          j=0 ,0<3 true sout(空) j++
         *          j=1,1<3 true sout(空) j++
         *          j=2,2<3 true sout(空) j++
         *          j=3,3<3 false
         *          第二次内循环
         *          j=0,0<=0 true sout('A'+0) j++
         *          j=1,1<=0 false
         *          第三次内循环
         *          j=0 0<0 fasle  结束循环  往下执行换行  i++
         *      i=1,1<4 true
         *          第一层内循环
         *          j=0,0<2 true sout(空) j++
         *          j=1,1<2 true sout(空) j++
         */
        for (int i = 0; i < 4; i++) { //行
            for (int j = 0; j < 3-i ; j++) { //空
                System.out.print(" ");
            }
            for (int j = 0; j <= i; j++) { //正序 ABCD
                System.out.print((char)('A'+j));
            }
            for (int j = 0; j < i ; j++) { //倒序 CBA
                System.out.print((char)('A'+2 - j));
            }
            System.out.println();
        }


    }
}
